SuperMap iPortal(以下简称“iPortal”) 是面向云计算的GIS门户平台,可实现对地图、服务、场景、数据等各种GIS资源进行整合、发现、分享与管理,还可实现对组织内部多个GIS服务器进行监控,保障平台系统安全稳定运行。其个性化的门户定制和API扩展开发能力,可以助您快速构建符合自身行业风格的GIS门户站点或打造属于组织、单位的特色私有云门户。
SuperMap iMobile(以下简称“iMobile”)全面对接iPortal,建立“云”+“端”一体化的资源管理体系,将云存储、大数据、云计算与移动GIS应用结合起来,提供更多便利的功能与服务。
iMobile对接iPortal实现的功能包括:
- 用户账号:在移动端登录iPortal,支持密码修改和账户注销。
- 查找资源:通过分类过滤,标签过滤,查询地图、场景、服务、数据、大屏、洞察等资源,支持模糊搜索,并对查询结果分类排序。
- 资源管理:在移动端管理地图、场景、服务、数据、大屏、洞察等资源,移动端和云端实时同步。
- 我的数据:移动端和云端数据交互,进行数据的上传、下载、分享等操作。
- 我的地图:移动端进行地图属性修改,比例尺、名称、级数、投影的修改,与云端实时同步。
- 我的服务:移动端实现服务共享和服务删除。
开发iMobile对接iPortal的应用程序,用到的jar包包括“com.supermap.data.jar”、 “com.supermap.mapping.jar”、“com.supermap.services.jar”、“okhttp-3.9.0.jar”、“okio-1.13.0.jar”,用到的so库为“libimb2d.so”,上述jar包和so库位于SuperMap iMobile产品包中的libs”文件夹下。
登录
iMobile与iPortal实现了账户统一,既两个产品可以使用同一个账号。使用时,先利用账号进行登录并设置设置监听。
监听
IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {});
登录
IPortalService.getInstance().login(strPortalUrl,strUser,strPassword,bRememberPassword);
参考代码如下:
//添加监听
IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {
@Override
public void onFailed(Exception exception) {
Toast.makeText(MainActivity.this, exception.getMessage(), Toast.LENGTH_SHORT).show();
}
@Override
public void onResponse(Response response) {
}
});
//登录
String strPortalUrl = "user url";
String strUser = "user name";
String strPassword = "user password ";//登录的地址、账号、密码请根据实际应用添加
boolean bRememberPassword = true;
IPortalService.getInstance().login(strPortalUrl,strUser,strPassword,bRememberPassword);
资源管理
移动端可以对iPortal中自有的地图、服务、场景、数据、洞察、大屏等资源进行管理,并能够查看公有的地图、服务、场景、数据、洞察、大屏等资源。移动端发送查询请求、云服务响应请求并返回结果(JSON格式)、移动端获取并解析结果。
图:资源管理操作流程 |
地图
“我的地图”
获取和查看登录账号中的私有的地图服务,支持地图属性修改。
操作步骤:
① 调用IportalService类中的addOnResponseListener()方法,添加监听。
IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {});
② 构造查询参数(HashMap<String, String>),查询参数可参照下表:
名称 | 类型 | 含义 |
---|---|---|
tags | String[] | 根据地图标签过滤。 |
suggest | Boolean | 是否是默认底图。 |
sourceTypes | SourceType[] | 根据地图来源类型过滤。包括:SUPERMAP_REST,MAPVIEWER,WMS,WMTS。 |
keywords | String[] | 关键字过滤。 |
epsgCode | int | 获取指定投影的地图。 |
orderBy | OrderBy[] | 排序字段,支持多个字段的排序。 |
orderType | OrderType | 升序还是降序。 |
currentPage | int | 分页页码。 |
pageSize | int | 分页中每页大小。 |
updateStart | Long | 查询此时间值及此时间值之后更新过的地图,如果为 null 或者小于零,则起始时间不限制。 |
updateEnd | Long | 查询此时间值及此时间值之前更新过的地图,如果为 nul 或者小于零 l,则截止时间不限制。 |
visitStart | Long | 查询此时间值及此时间值之后访问过的地图,如果为 null 或者小于零,则起始时间不限制。 |
visitEnd | Long | 查询此时间值及此时间值之前访问过的地图,如果为 null 或者小于零,则截止时间不限制。 |
filterFields | FilterFields[] | 用于关键字查询时的字段过滤。字段名称需大写。 |
checkStatus | CheckStatus | 根据审核状态过滤。 |
③ 调用IPortalService类中的getMyMaps()方法,获取登录账号下的地图资源合集。
IPortalService.getInstance().getMyDatas(searchParameter);
④ 解析iPortal返回的的“我的地图”的查询结果,既解析返回的JSON字符串。在解析时,可根据使用需求自行解析,或者使用“MapsBean”类(地图集合)、“MapBaseBean”类(一幅地图),这两个类对应的.java格式文件存放在产品包中,具体地址为产品包中的“/ SampleCode\Android Studio\AndroidStudioSampleCode\iportalunity\src\main\java\com\supermap\imobile\bean”中。(iMobile 10i及以上版本支持)。
参考代码如下:
//添加监听
try {
IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {
@Override
public void onFailed(final Exception e) {
runOnUiThread(new Runnable() {
@Override
public void run() {
mTextView.setText("网络请求失败: " + e.getMessage());
}
});
}
@Override
public void onResponse(Response response) {
if (response.isSuccessful()) {
try {
final String responseBody = response.body().string();
runOnUiThread(new Runnable() {
@Override
public void run() {
//解析返回结果,这里使用MapsBean类,演示如何解析和获取参数值
Gson gson = new Gson();
m_mapsBean = gson.fromJson(responseBody, com.supermap.imobile.bean.MapsBean.class);
int pageSize = m_mapsBean.getPageSize();
int total = m_mapsBean.getTotal();
int counts = 0;
if (total >= pageSize) {
counts = pageSize;
} else {
counts = total;
}
for (int i = 0; i < counts; i++) {
com.supermap.imobile.bean.MapsBean.ContentBean contentBean = m_mapsBean.getContent().get(i);
int ID = contentBean.getId();
String mapTitle = contentBean.getTitle();
String mapType = contentBean.getSourceType();
String thumbnail = contentBean.getThumbnail();
int count = contentBean.getVisitCount();
long updateTime = contentBean.getUpdateTime();
long createTime = contentBean.getCreateTime();
String description = contentBean.getDescription();
}
}
});
} catch (Exception e) {
e.printStackTrace();
}
} else {
runOnUiThread(new Runnable() {
@Override
public void run() {
mTextView.setText("网络请求失败");
}
});
}
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
//准备查询参数
HashMap<String, String> searchParameter = new HashMap<>();
searchParameter.put("pageSize", "20");
//获取“我的地图”
IPortalService.getInstance().getMyMaps(searchParameter);
- 数据接收过程可能较长,不要将该过程写到主线程中。
- 下面所述的请求的监听方法跟“我的地图”中,使用的监听方法相同,下面不在赘述。
“地图资源”
获取和查看iPortal公有服务中的地图资源。
操作步骤:
① 添加监听,调用IportalService类中的addOnResponseListener()方法,添加监听。
IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {});
② 构造查询参数(HashMap<String, String>),查询参数可参照表1:
③ 调用IportalService类中的getMaps()方法,获取iPortal中公有的地图资源。
IPortalService.getInstance().getMaps(searchParameter);
④ 解析iPortal返回的“地图资源”的查询结果,既解析返回的JSON字符串。在解析时,可根据使用需求自行解析,或者使用“MapsBean”类(地图集合)、“MapBaseBean”类(一幅地图),这两个类对应的.java格式文件存放在产品包中,具体地址为产品包中的“/ SampleCode\Android Studio\AndroidStudioSampleCode\iportalunity\src\main\java\com\supermap\imobile\bean”中。(iMobile 10i及以上版本支持)。
参考代码如下:
//添加监听
//略(参照“我的地图”)
//准备查询参数
HashMap<String, String> searchParameter = new HashMap<>();
searchParameter.put("pageSize", "20");
//获取“地图资源”
IPortalService.getInstance().getMaps(searchParameter);
服务
“我的服务”
获取和查看登录账号中的私有的服务资源,支持将私有服务发布为公有服务。
操作步骤:
① 添加监听,调用IportalService类中的addOnResponseListener()方法,添加监听。
IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {});
② 构造查询参数(HashMap<String, String>),查询参数可参照上表。
③ 调用IportalService类中的getMyServices ()方法,获取登录账号下服务的集合。
IPortalService.getInstance().getMyServices (searchParameter);
④ 解析iPortal返回的“我的服务”的查询结果,既解析返回的JSON字符串。在解析时,可根据使用需求自行解析,或者使用“ServicesBean”类(服务集合)、“ServiceBaseBean”类(单个服务),这两个类对应的.java格式文件存放在产品包中,具体地址为产品包中的“/ SampleCode\Android Studio\AndroidStudioSampleCode\iportalunity\src\main\java\com\supermap\imobile\bean”中。(iMobile 10i及以上版本支持)。
参考代码如下:
//添加监听
//略(参照“我的地图”)
//准备查询参数
HashMap<String, String> searchParameter = new HashMap<>();
searchParameter.put("pageSize", "20");
//获取“我的服务”
IPortalService.getInstance().getMyServices(searchParameter);
“服务资源”
获取和查看iPortal公有服务中的服务资源。
操作步骤:
① 添加监听,调用IportalService类中的addOnResponseListener()方法,添加监听。
IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {});
② 构造查询参数(HashMap<String, String>),查询参数可参上表:
③ 调用IportalService类中的getServices ()方法,获取iPortal中公有的服务资源。
IPortalService.getInstance().getServices (searchParameter);
④ 解析iPortal返回的“服务资源”的查询结果,既解析返回的JSON字符串。在解析时,可根据使用需求自行解析,或者使用“ServicesBean”类(服务集合)、“ServiceBaseBean”类(单个服务),这两个类对应的.java格式文件存放在产品包中,具体地址为产品包中的“/ SampleCode\Android Studio\AndroidStudioSampleCode\iportalunity\src\main\java\com\supermap\imobile\bean”中。(iMobile 10i及以上版本支持)。
参考代码如下:
//添加监听
//略(参照“我的地图”)
//准备查询参数
HashMap<String, String> searchParameter = new HashMap<>();
searchParameter.put("pageSize", "20");
//获取“服务资源”
IPortalService.getInstance().getServices(searchParameter);
场景
“我的场景”
获取和查看登录账号中的私有的场景资源。
操作步骤:
① 添加监听,调用IportalService类中的addOnResponseListener()方法,添加监听。
IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {});
② 构造查询参数(HashMap<String, String>),查询参数可参照上表:
③ 调用IportalService类中的getMyScenes ()方法,获取登录账号下场景的集合。
IPortalService.getInstance().getMyScenes (searchParameter);
④ 解析iPortal返回的“我的场景”的查询结果,既解析返回的JSON字符串。在解析时,可根据使用需求自行解析,或者使用“ScenesBean”类(场景集合)、“SceneBaseBean”类(单个场景),这两个类对应的.java格式文件存放在产品包中,具体地址为产品包中的“/ SampleCode\Android Studio\AndroidStudioSampleCode\iportalunity\src\main\java\com\supermap\imobile\bean”中。(iMobile 10i及以上版本支持)。
参考代码如下:
//添加监听
//略(参照“我的地图”)
//准备查询参数
HashMap<String, String> searchParameter = new HashMap<>();
searchParameter.put("pageSize", "20");
//获取“我的场景”
IPortalService.getInstance().getMyScenes(searchParameter);
“场景资源”
获取和查看iPortal公有服务中的场景资源。
操作步骤:
① 添加监听,调用IportalService类中的addOnResponseListener()方法,添加监听。
IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {});
② 构造查询参数(HashMap<String, String>),查询参数可参照上表:
③ 调用IportalService类中的getScenes ()方法,获取iPortal中公有的场景资源。
IPortalService.getInstance().getScenes (searchParameter);
④ 解析iPortal返回的“场景资源”的查询结果,既解析返回的JSON字符串。在解析时,可根据使用需求自行解析,或者使用“ScenesBean”类(场景集合)、“SceneBaseBean”类(单个场景),这两个类对应的.java格式文件存放在产品包中,具体地址为产品包中的“/ SampleCode\Android Studio\AndroidStudioSampleCode\iportalunity\src\main\java\com\supermap\imobile\bean”中。(iMobile 10i及以上版本支持)。
参考代码如下:
//添加监听
//略(参照“我的地图”)
//准备查询参数
HashMap<String, String> searchParameter = new HashMap<>();
searchParameter.put("pageSize", "20");
//获取“场景资源”
IPortalService.getInstance().getScenes(searchParameter);
数据
“我的数据”
获取和查看登录账号中的私有的数据资源,可将数据发布至与服务,或下载云服务的数据至本地。
操作步骤:
① 添加监听,调用IportalService类中的addOnResponseListener()方法,添加监听。
IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {});
② 构造查询参数(HashMap<String, String>),查询参数可参照上表:
③ 调用IportalService类中的getMyDatas ()方法,获取登录账号下数据的集合。
IPortalService.getInstance().getMyDatas (searchParameter);
④ 解析iPortal返回的“我的数据”的查询结果,既解析返回的JSON字符串。在解析时,可根据使用需求自行解析,或者使用“DatasBean”类(数据集合)、“DataBaseBean”类(单份数据),这两个类对应的.java格式文件存放在产品包中,具体地址为产品包中的“/ SampleCode\Android Studio\AndroidStudioSampleCode\iportalunity\src\main\java\com\supermap\imobile\bean”中。(iMobile 10i及以上版本支持)。
参考代码如下:
//添加监听
//略(参照“我的地图”)
//准备查询参数
HashMap<String, String> searchParameter = new HashMap<>();
searchParameter.put("pageSize", "20");
//获取“我的数据”
IPortalService.getInstance().getMyDatas(searchParameter);
“数据资源”
获取和查看iPortal公有服务中的数据资源。
操作步骤:
① 添加监听,调用IportalService类中的addOnResponseListener()方法,添加监听。
IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {});
② 构造查询参数(HashMap<String, String>),查询参数可参照上表:
③ 用IportalService类中的getDatas ()方法,获取iPortal中公有的数据资源。
IPortalService.getInstance().getDatas (searchParameter);
④ 解析iPortal返回的“场景资源”的查询结果,既解析返回的JSON字符串。在解析时,可根据使用需求自行解析,或者使用“DatasBean”类(数据集合)、“DataBaseBean”类(单个数据),这两个类对应的.java格式文件存放在产品包中,具体地址为产品包中的“/ SampleCode\Android Studio\AndroidStudioSampleCode\iportalunity\src\main\java\com\supermap\imobile\bean”中。(iMobile 10i及以上版本支持)。
参考代码如下:
//添加监听
//略(参照“我的地图”)
//准备查询参数
HashMap<String, String> searchParameter = new HashMap<>();
searchParameter.put("pageSize", "20");
//获取“数据资源”
IPortalService.getInstance().getDatas(searchParameter);
洞察
“我的洞察”
获取和查看登录账号中的私有的洞察资源。
操作步骤:
① 添加监听,调用IportalService类中的addOnResponseListener()方法,添加监听。
IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {});
② 构造查询参数(HashMap<String, String>),查询参数可参照上表:
③ 调用IportalService类中的getMyInsights ()方法,获取登录账号下洞察的集合。
IPortalService.getInstance().getMyInsights (searchParameter);
④ 解析iPortal返回的“我的洞察”的查询结果,既解析返回的JSON字符串。在解析时,可根据使用需求自行解析,或者使用“InsightsBean”类(洞察集合)、“InsightBaseBean”类(单个洞察),这两个类对应的.java格式文件存放在产品包中,具体地址为产品包中的“/ SampleCode\Android Studio\AndroidStudioSampleCode\iportalunity\src\main\java\com\supermap\imobile\bean”中。(iMobile 10i及以上版本支持)。
参考代码如下:
//添加监听
//略(参照“我的地图”)
//准备查询参数
HashMap<String, String> searchParameter = new HashMap<>();
searchParameter.put("pageSize", "20");
//获取“我的大屏”
IPortalService.getInstance().getMapDashboards(searchParameter);
“洞察资源”
获取和查看iPortal公有服务中的洞察资源。
操作步骤:
① 添加监听,调用IportalService类中的addOnResponseListener()方法,添加监听。
IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {});
② 构造查询参数(HashMap<String, String>),查询参数可参照上表:
③ 调用IportalService类中的getInsights ()方法,获取iPortal中公有的洞察资源。
IPortalService.getInstance().getInsights (searchParameter);
④ 解析iPortal返回的“场景资源”的查询结果,既解析返回的JSON字符串。在解析时,可根据使用需求自行解析,或者使用“InsightsBean”类(洞察集合)、“InsightBaseBean”类(单个洞察),这两个类对应的.java格式文件存放在产品包中,具体地址为产品包中的“/ SampleCode\Android Studio\AndroidStudioSampleCode\iportalunity\src\main\java\com\supermap\imobile\bean”中。(iMobile 10i及以上版本支持)。
参考代码如下:
//添加监听
//略(参照“我的地图”)
//准备查询参数
HashMap<String, String> searchParameter = new HashMap<>();
searchParameter.put("pageSize", "20");
//获取“洞察资源”
IPortalService.getInstance().getInsights(searchParameter);
大屏
“我的大屏”
获取和查看登录账号中的私有的大屏资源。
操作步骤:
① 添加监听,调用IportalService类中的addOnResponseListener()方法,添加监听。
IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {});
② 构造查询参数(HashMap<String, String>),查询参数可参照上表:
③ 调用IportalService类中的getMapDashboards ()方法,获取登录账号下大屏的集合。
IPortalService.getInstance().getMapDashboards (searchParameter);
④ 解析iPortal返回的“我的大屏”的查询结果,既解析返回的JSON字符串。在解析时,可根据使用需求自行解析,或者使用“MyMapDashboards”类(大屏集合)、“MapDashboardBaseBean”类(单个大屏),这两个类对应的.java格式文件存放在产品包中,具体地址为产品包中的“/ SampleCode\Android Studio\AndroidStudioSampleCode\iportalunity\src\main\java\com\supermap\imobile\bean”中。(iMobile 10i及以上版本支持)。
参考代码如下:
//添加监听
//略(参照“我的地图”)
//准备查询参数
HashMap<String, String> searchParameter = new HashMap<>();
searchParameter.put("pageSize", "20");
//获取“我的大屏”
IPortalService.getInstance().getMapDashboards(searchParameter);
“大屏资源”
获取和查看iPortal公有服务中的大屏资源。
操作步骤:
① 添加监听,调用IportalService类中的addOnResponseListener()方法,添加监听。
IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {});
② 构造查询参数(HashMap<String, String>),查询参数可参照上表:
③ 调用IportalService类中的getMapDashboards ()方法,获取iPortal中公有的洞察资源。
IPortalService.getInstance().getMapDashboards (searchParameter);
④ 解析iPortal返回的“场景资源”的查询结果,既解析返回的JSON字符串。在解析时,可根据使用需求自行解析,或者使用“MyMapDashboards”类(大屏集合)、“MapDashboardBaseBean”类(单个大屏),这两个类对应的.java格式文件存放在产品包中,具体地址为产品包中的“/ SampleCode\Android Studio\AndroidStudioSampleCode\iportalunity\src\main\java\com\supermap\imobile\bean”中。(iMobile 10i及以上版本支持)。
参考代码如下:
//添加监听
//略(参照“我的地图”)
//准备查询参数
HashMap<String, String> searchParameter = new HashMap<>();
searchParameter.put("pageSize", "20");
//获取“大屏资源”
IPortalService.getInstance().getMapDashboards(searchParameter);
地图属性
在移动端支持修改iPortal中对应账号下地图的属性。
操作步骤:
① 添加监听,调用IportalService类中的addOnResponseListener()方法。
IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {});
② 调用IportalService类中的getWebMap()方法,获取需要编辑的地图。
IPortalService.getInstance().getWebMap(m_nMapID);
③ 设置修改参数,这里用到了WebMapBean类,该类对应的.java文件,存储于产品包中,具体地址为产品包中的“/ SampleCode\Android Studio\AndroidStudioSampleCode\iportalunity\src\main\java\com\supermap\imobile\bean”中,(iMobile 10i及以上版本支持)。用户使用时,可利用该类或自己解析JSON文件。
④ 调用IportalService类中的updateWebMap()方法,修改地图属性。
参考代码:
①设置监听
IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {
@Override
public void onFailed(Exception e) {
mTextView.setText("网络请求失败: " + e.getMessage());
}
@Override
public void onResponse(Response response) {
if (response.isSuccessful()) {
try{
final String responseBody = response.body().string();
runOnUiThread(new Runnable() {
@Override
public void run() {
Gson gson = new Gson();
m_webMapBean = gson.fromJson(responseBody, com.supermap.imobile.bean.WebMapBean.class);
//③更新地图属性
m_webMapBean.setTitle("湖北");
m_webMapBean.setDescription("湖北人口");
//将更新后的结果转为JSON格式
String json = gson.toJson(m_webMapBean);
//④更新地图属性
IPortalService.getInstance().updateWebMap(m_nMapID, json);
}
});
} catch (Exception e){
e.printStackTrace();
}
}
}
});
//②根据地图ID,获取对应的地图
IPortalService.getInstance().getWebMap(m_nMapID);
上传、下载
上传数据
支持将本地的数据,上传到iPortal服务中。
操作步骤:
① 添加获取上传数据ID的监听,用于获得上传数据的ID。
IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {});
② 调用IportalService类中的getMyDataID()方法,获取上传数据的ID。
IPortalService.getInstance().getMyDataID(filePath, tags, DataItemType.WORKSPACE);
③ 添加上传数据监听,用于获取数据是否上传成功。
IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {});
④ 调用IPortalService类中的uploadData()方法,上传数据。
IPortalService.getInstance().uploadData(filePath, childID, new ProgressRequestBody.ProgressListener() {});
⑤ 在监听中,获取上传进度
参考代码如下:
try {
//本地数据绝对路径
final String filePath = SDCARD + "/iPortal/我的资源/WORKSPACE/云南.zip";
//①添加获取数据ID监听
IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {
@Override
public void onFailed(Exception e) {
}
@Override
public void onResponse(Response response) {
if (response.isSuccessful()) {
String responseBody = null;
try {
responseBody = response.body().string();
JSONObject root = new JSONObject(responseBody);
if (root.has("childID")) {
int childID = root.getInt("childID");
if (filePath != null && !filePath.isEmpty()) {
//③添加上传数据监听
IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {
@Override
public void onFailed(Exception e) {
}
@Override
public void onResponse(Response response) {
}
});
//④上传数据
IPortalService.getInstance().uploadData(filePath, childID, new ProgressRequestBody.ProgressListener() {
@Override
public void transferred(final long length,final long size) {
runOnUiThread(new Runnable() {
@Override
public void run() {
//⑤展示上传进度
double value = (float)size / length * 100;
mTextView.setText(String.valueOf(value));
}
});
}
});
}
} else {
}
} catch (Exception e) {
e.printStackTrace();
}
} else {
}
}
});
//②根据参数,获取上传数据的ID
String tags = "用户数据";
String type = "WORKSPACE";
IPortalService.getInstance().getMyDataID(filePath, tags, DataItemType.WORKSPACE);
} catch (Exception e) {
e.printStackTrace();
}
下载数据
将iPortal中的数据资源下载到本地。
操作步骤:
① 添加监听,用于判断下载是否成功,并保存数据。
IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {});
② 调用IPortalService类中的downloadData()方法,下载数据。
IPortalService.getInstance().downloadData(nID, new ProgressResponseBody.ProgressListener() {});
③ 保存数据。
④ 在监听中,获取下载进度。
参考代码如下:
try {
//下载数据的本地存储地址
final String filePath = SDCARD + "/iPortal/我的资源/WORKSPACE/a.zip";
//①添加下载监听
IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {
@Override
public void onFailed(Exception e) {
}
@Override
public void onResponse(Response response) {
if (response.isSuccessful()) {
try {
//③保存数据
ResponseBody body = response.body();
InputStream is = body.byteStream();
File file = new File(filePath);
file.getParentFile().mkdirs();
FileOutputStream fileout = new FileOutputStream(file);
//根据实际运行效果 设置缓冲区大小
byte[] buffer = new byte[1024];
int ch = 0;
while ((ch = is.read(buffer)) != -1) {
fileout.write(buffer, 0, ch);
}
is.close();
fileout.flush();
fileout.close();
} catch (IOException e) {
e.printStackTrace();
}
} else {
}
}
});
//②下载数据
IPortalService.getInstance().downloadData(1060511768, new ProgressResponseBody.ProgressListener() {
@Override
public void update(final long length, final long size, final boolean b) {
runOnUiThread(new Runnable() {
@Override
public void run() {
//④展示下载进度
double value = (float)length / size * 100;
mTextView.setText(String.valueOf(value));
}
});
}
});
} catch (Exception e) {
e.printStackTrace();
}